<!DOCTYPE html>
<meta charset="utf-8">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
'use strict';

test(t => {
  Object.defineProperty(Object.prototype, 'type',
                        {
                          configurable: true,
                          get() {
                            throw Error();
                          }
                        });
  t.add_cleanup(() => {
    delete Object.prototype.type;
  });
  const generator = new MediaStreamTrackGenerator('video');
  // The WritableStream is created lazily, so access it to trigger creation.
  generator.writable.getWriter();
}, 'a throwing getter on Object.prototype.type should not interfere with ' +
     'native writable stream creation');

test(t => {
  Object.defineProperty(Object.prototype, 'type',
                        {
                          configurable: true,
                          get() {
                            this.start(0x414141);
                          }
                        });
  t.add_cleanup(() => {
    delete Object.prototype.type;
  });
  const generator = new MediaStreamTrackGenerator('video');
  generator.writable.getWriter();
}, 'a getter that calls start() with a number on Object.prototype.type ' +
     'should not interfere with native writable stream creation');

test(t => {
  Object.defineProperty(Object.prototype, 'type',
                        {
                          configurable: true,
                          get() {
                            this.start({});
                          }
                        });
  t.add_cleanup(() => {
    delete Object.prototype.type;
  });
  const generator = new MediaStreamTrackGenerator('video');
  generator.writable.getWriter();
}, 'a getter that calls start() with an object on Object.prototype.type ' +
     'should not interfere with native writable stream creation');

</script>
